package com.regent.central.bill.service.mrp;

import com.regent.central.bill.core.mrp.BillMaterialPurchase;
import com.regent.central.bill.repository.mrp.dto.*;
import com.regent.central.bill.repository.mrp.dto.arrive.PurchaseMaterialRemittanceDTO;
import com.regent.central.infrastructure.service.DomainService;

import java.util.List;

public interface BillMaterialPurchaseService extends DomainService<BillMaterialPurchase> {

    /**
     * 新建一个采购单
     */
    void create(MaterialPurchaseAddDTO purchaseAddDTO);

    /**
     * 封装产品给的生成采购单号的逻辑并返回生成的单号
     *
     * @param unitId 组织ID
     * @return 单号
     */
    String getOrderNumber(String unitId);

    /**
     * 根据条件查询物料采购情况
     */
    BillMaterialPurchasePageDTO listMaterialPurchase(BillMaterialPurchaseQueryDTO billMaterialPurchaseQueryDTO, Integer pageNum, Integer pageSize);

    /**
     * 获取采购单详情
     *
     * @param billMaterialPurchaseId 物料采购单ID
     * @return 采购单详情
     */
    BillMaterialPurchaseDetailDTO getBillPurchase(String billMaterialPurchaseId);

    /**
     * 维护物料采购单的到料状态
     */
    void keepBillPurchaseArriveStatus(String billMaterialPurchaseId);

    /**
     * 查询某个组织下的所有采购单号
     *
     * @param unitId 组织ID
     * @return 采购单号列表
     */
    List<String> listOrderNoByUnitId(String unitId);

    void remit(PurchaseMaterialRemittanceDTO materialRemittanceDTO);

    /**
     * 采购单撤销
     *
     * @param billMaterialPurchaseId 采购单ID
     */
    PurchaseUndoResult undo(String billMaterialPurchaseId);

    /**
     * 手动到齐
     */
    void manualArriveComplete(String billMaterialPurchaseId, String facMissionId, String materialSkuId);
}